package cn.com.surker.sale.dao;

import cn.com.surker.sale.entity.SaleContract;
import cn.com.surker.vo.sale.SaleContractVo;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 销售合同表 Mapper 接口
 * </p>
 *
 * @author admin
 * @since 2024-06-17
 */
public interface SaleContractDao extends BaseMapper<SaleContract> {

    /**
     * 查询销售人员
     * @param orgId
     * @return
     */
    List<Map<String, Object>> findSales(Long orgId, String time);

    /**
     * 分页查询临供单合同总数
     * @param searchVal
     * @return
     */
    Integer findSupplyContractTotal(String searchVal, Long orgId);

    /**
     * 分页查询临供单合同信息
     * @param searchVal
     * @param offset
     * @param limit
     * @return
     */
    List<Map<String, Object>> findSupplyContractPage(String searchVal, Long orgId, Integer offset, Integer limit);

	/**
	 * 根据站点id和(旧版本的erpid)erpid查询合同
	 *
	 * @param orgId
	 * @param erpId
	 * @return
	 */
	@Deprecated
	SaleContract findByErpId(Long orgId, Long erpId);

	SaleContract findByErpName(Long orgId, String erpConName);

	/**
	 * 查询合同及客户
	 * @param contract
	 * @return
	 */
	List<SaleContractVo> findContractVo(SaleContract contract);

	/**
	 * 查询合同下拉框数据 速度优化加入指定信息
	 * @param contract
	 * @return
	 */
	List<SaleContractVo> findSelectContract(SaleContract contract);

	/**
	 * 查询合同信息
	 *
	 * @param conId
	 * @return
	 */
	SaleContractVo selectById(Long conId);

	/**
	 * 分页查询销售合同与客户信息
	 * @param page
	 * @param queryWrapper
	 * @param <E>
	 * @return
	 */
	<E extends IPage<SaleContractVo>> E selectListV1(E page, @org.apache.ibatis.annotations.Param(Constants.WRAPPER) Wrapper<SaleContract> queryWrapper);

	List<SaleContract> selectListV1(@Param(Constants.WRAPPER) Wrapper<SaleContract> queryWrapper);

	/**
	 * 查询主合同列表
	 *
	 * @param orgId
	 * @return
	 */
	List<Map<String, Object>> masterList(Long orgId);

	/**
	 *
	 * @param orgId
	 * @return
	 */
	List<SaleContract> slaveList(Long orgId, Long batchId, Long slaveId);

	/**
	 * 查询合同名称是否存在
	 * @param name
	 * @return
	 */
	Integer findExistName(String name, Long orgId, Long clientId);

	/**
	 * 查询不限供合同
	 * @param orgId
	 * @return
	 */
	List<SaleContract> findWorkByOrg(Long orgId);

}
